#include "data.h"
#include "UART.h"
#include <string.h>
#include <avr/interrupt.h>
//----------------------------------------//
//! valid_Data                            //
//! Overeni startu ramce (znak $)                 //
//! param prijaty znak                                    //
//----------------------------------------//
int validData(const char arg_znak)
{
            if(arg_znak=='$')
        {
                return 1;
        }
        return 0;
}

/*
 * nactiData
 *  - spoustena v ISR
 *  - zpracovani znaku (rozhodnuti o spravnosti ramce, validnich datech)
 *  ->NOVA_DATA
 */
void nactiData(char znak)
{
        pocet_znaku++;
        if ((pocet_znaku == 3) && (znak != 'R')) {
                pocet_znaku=0;
                flag=0;
                return;
        }

        if ((pocet_znaku == 18) && (znak == 'A'))            //<! Nejsou validni data
        {
                pocet_znaku=0;
                flag=0;
                return;
        }

        if (pocet_znaku > 18) {
                if(pocet_znaku==35)
                {
                        cli();
                        stav=NOVA_DATA;
                        return;

                }
                write_Character(znak);
                switch (znak) {
                //case '.': TEcka se bude hodit jako rozdelovac
                case ',':
                case 'E':
                case 'N':
                        break;
                default:
                        pole[pocet_znaku - 18] = znak;           //<! Ulozeni platnejch dat
                        break;
                }
        }

//      flag = 0;
}


/*
 * ulozeniDat
 *  - ulozeni dat do prislusne struktury
 *  ->DATA
 */
void ulozeniDat(GPSdata *arg_pozice)
{
        arg_pozice->delka=getValue();
        arg_pozice->sirka=copyPole();
        flag=0;
        pocet_znaku=0;
        sei();
        arg_pozice->platnost=PLATNA_DATA;
        pole[0]='\0';
        stav=DATA;
}
/*
 * copyPole
 *  - prekopirovani znaku z pole
 */
double copyPole()
{
        char loc_znak;
        for(int i=0;i<5;i++)
        {
                loc_znak=pole[i+5];
                pole[i]=loc_znak;
        }
        return (getValue());
}
/*
 * getValue
 *  - ulozeni prvniho double do promenne
 */
double getValue()
{
        char loc_pole[5];
        strncpy(pole,loc_pole,5);
        double a;
        return a;
        //return (atof(loc_pole));
}
/*
 * kontrolaDat
 *  - porovnani, zda nedoslo ke zmene polohy (skrze funkci porovnejPolohy()
 *  - jen v pripade, ze jsou obe polohy platne
 *
 */
void kontrolaDat()
{
        if ((ptr_reference->platnost == PLATNA_DATA)
                                                && (ptr_aktualni->platnost == PLATNA_DATA))
        {
                porovnejPolohy();
        }



}
/*
 * provnejPolohy
 *  - porovna polohy
 *  ->ALARM pokud je poloha jina
 *  ->NEPLATNA_DATA v pripade, ze je poloha stejna
 */
void porovnejPolohy()
{
        if((ptr_reference->delka!=ptr_aktualni->delka)||(ptr_reference->sirka!=ptr_aktualni->sirka))
        {
                stav=ALARM;
        }
        else
        {
        	stav=NEPLATNA_DATA;
        }
        }
}
